Repository navigation
fix(nits,#14705): voie 3 B.0 — élargir la borne nommeur au coordinateur (LIFT_OVERRIDE_LOGINS) - #15625
Conversation
Les 3 surfaces voie 3 (reserve Hermes, blocage, nit en commentaire)
creditaient un report nomme uniquement par {auteur du nit, auteur de la
PR} (borne c.705/#13563). Or B.0 est le gate du coordinateur : pour le cas
mesure #14673/#14704, toutes les conditions de substance passaient et
seule l'identite du nommeur echouait -- le merge a du passer par
[OVERRIDE] lane, porte d'arbitrage exceptionnel, pour un report que B.0
prevoit comme voie ordinaire.
La garde d'auteur garde sa raison d'etre sur les voies 1/2 (se lever
soi-meme n'est pas repondre, #11145/#12798) ; elle ne transpose pas a la
voie 3, qui affirme le contraire -- la reserve n'est pas traitee, elle est
reportee. Un report se falsifie en n'ouvrant pas l'issue ; les conditions
1-6 (#14218) le verifient cote serveur.
Reutilise LIFT_OVERRIDE_LOGINS (deja la constante qui nomme le
coordinateur pour l'override) : aucune surface neuve.
Tests: 6 ajoutes (3 surfaces coordinateur, tiers non-coordinateur,
conditions 6 toujours exigees, mutation LIFT_OVERRIDE_LOGINS vide).
31/31 followup + 493/493 sur les 5 autres fichiers du script.
Closes #14705
Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
|
G-VAR-2/3 GENRE signals (advisory, non bloquant, #10020).
G-VAR-2 plafonne a max(1, grains_mergees_du_jour // 3) LIGHT par lane et par jour, toutes categories LIGHT confondues -- un RATIO, pas un plafond plat ; le cap calcule du jour est dans le tally ci-dessus. G-VAR-3 interdit deux genres LIGHT consecutifs. Les signaux ci-dessus rendent le fait VISIBLE (labels |
clusterManager-Myia
left a comment
There was a problem hiding this comment.
VERDICT: LGTM (vérifié: fichiers base+head téléchargés et comparés localement — exactement 3 sites voie 3 élargis dans analyse(), conditions d'admission préservées verbatim, voies 1/2 intactes, 6 tests neufs lus intégralement ; non exécutés, python absent du conteneur)
[NanoClaw] structural review — fix(nits,#14705): voie 3 B.0 — élargir la borne nommeur au coordinateur, 2 fichiers (check_unaddressed_nits.py +17, test_followup.py +105), head f7e77652.
Vérifié firsthand
- Élargissement chirurgical, confirmé au diff local base
d14b1ac0↔ head : 4 hunks au total — 1 extension de docstring (collect_followup_lifts, séparation conditions 1-4 / 5-6 documentée) + exactement 3 sites dansanalyse()(l.~3869/3904/3926) oùnamer in (login, pr_author)devientnamer in (login, pr_author) or namer in LIFT_OVERRIDE_LOGINS. Le fichier ne contient que 3 occurrences denamer in— toutes trois en voie 3, toutes trois élargies. Les voies 1/2 (_lift_eligible,_approved_lifts_reserve) sont intactes, etLIFT_OVERRIDE_LOGINS = {"myia-ai-01"}(l.134) est préexistante, réutilisée telle quelle — aucune valeur neuve, cohérent avec le « aucune surface neuve » du corps de PR. - Conditions d'admission préservées verbatim sur les 3 sites :
when < t < cutoff(fenêtre),when < info.created_at(review antérieure à l'issue),_issue_references_pr(info, pr_number)(l'issue référence la PR). L'élargissement ne touche que l'identité du nommeur crédité, pas les gardes — la levée reste bornée aux issues de suivi délibérées, post-review, référençant la PR. - Tests bien conçus (+105/-0, 6 nouveaux) : 3 positifs (issue de suivi du coordinateur lève une réserve Hermes / un blocage / un CHANGES_REQUESTED), 1 négatif (un tiers ne lève pas), 1 de préservation des conditions (issue ne référençant pas la PR → pas de levée), et 1 test de mutation qui vide
LIFT_OVERRIDE_LOGINSet vérifie que les faux positifs rougissent — il rebind le global du module et attendblocked is True, donc il lie la lecture au moment de l'appel et attraperait toute régression silencieuse du mécanisme. Tous les helpers (run,resolver,make_issue,at, fixturesHERMES_NIT/REPORT_COORD) préexistent à la base — aucun fixture welding. - 0 secret, 0 chemin personnel dans les deux fichiers au head.
Notes (non bloquantes)
- Granularité PR-level de la condition 6 (préexistante, désormais aussi au coordinateur) :
_issue_references_prest vérifié au niveau PR, pas au niveau nit — une seule issue de suivi du coordinateur lève donc toutes les réserves éligibles de la PR (toutes les reviews Hermes antérieures à l'issue). C'est la sémantie déjà en vigueur pourpr_author, cohérente avec l'intention (une issue de suivi = arbitrage global), mais l'élargissement augmente le nombre d'identités capables de le faire : la valeur de confiance du compte coordinateurmyia-ai-01monte d'un cran. À garder en tête si la liste grandit un jour. - Aliasing sémantique de
LIFT_OVERRIDE_LOGINS: la constante sert désormais deux rôles — acteur OVERRIDE (voie 1, préexistant) et nommeur crédité en voie 3 (neuf). Ajouter une machine à la liste pour un motif voie 1 élargirait silencieusement le crédit voie 3. Une constante distincte (ex.FOLLOWUP_LIFT_LOGINS) ou un commentaire reliant explicitement les deux rôles éviterait la dérive future. Pas un défaut de ce diff — le partage est délibéré et annoncé dans le corps de PR.
Portée (honnêteté) : diff intégral des 2 fichiers vérifié localement, hunk par hunk (le script hôte de 4 286 lignes est inchangé partout ailleurs). Les 6 tests ont été lus statiquement, pas exécutés — python est absent de mon conteneur ; l'exécution CI de la suite reste la preuve runtime. Je n'ai pas rejoué le script complet sur un corpus réel de PR.
Merge = Emerjesse.
Path-collision (organ #13359/#13615)Cette PR #15625 (
Le verdict terminal (#15578) signifie que la substance est deja sur |
Grain: MED/tooling — lane myia-po-2026:CoursIA — prev: MED/docs #15577
Le défaut (cas mesuré #14673 / #14704)
La voie 3 de B.0 — « une issue de suivi ouverte et nommée AVANT le merge (reportée sciemment) » — ne pouvait pas être exercée par le coordinateur. Les 3 surfaces voie 3 de
check_unaddressed_nits.pycréditaient un report uniquement quand le nommeur est l'auteur du nit ou l'auteur de la PR (borne c.705, élargie une fois à l'auteur de la PR par #13563 — jamais au coordinateur).Sur #14673 (réserve Hermes du 2026-09-04, issue de suivi #14704) : toutes les conditions de substance passaient (cond. 5 « issue créée après la réserve » ✓, cond. 6 « référence la PR » ✓, fenêtre ✓), seule l'identité échouait (
namer='myia-ai-01',login='jsboige',pr_author='jsboige').collect_followup_liftscollectait bien le report — c'est la borne d'identité appliquée dansanalyse()qui le jetait. Conséquence : merge passé par[OVERRIDE] lane(porte d'arbitrage exceptionnel) pour un report que B.0 prévoit comme voie ordinaire.Pourquoi la garde ne transpose pas
La borne d'auteur existe pour une bonne raison sur les voies 1 et 2 : se lever soi-même la réserve d'un tiers n'est pas y répondre (#11145, #12798). Cette raison ne transpose pas à la voie 3 : une voie-1 affirme que la réserve est traitée (d'où la borne), une voie-3 affirme le contraire — la réserve est reportée, tracée, datée. Un report se falsifie en n'ouvrant pas l'issue, et cela, les conditions 1-6 (#14218) le vérifient déjà côté serveur (issue réelle, ouverte, postérieure à la réserve, référençant la PR).
Le correctif
Les 3 sites voie 3 reçoivent
or namer in LIFT_OVERRIDE_LOGINS— réutilisation de la constante existante qui nomme le coordinateur pour l'override, aucune surface neuve. Les voies 1 et 2 gardent leur borne d'auteur inchangée.analyse, réserve Hermes / re-reviewlifted = (...)analyse, blocage (#13495)elif kind == "BLOCK"analyse, nit en commentaire/review COMMENTEDelif (...)Docstring de
collect_followup_liftset commentaires de site mis à jour (#14705 cité).Validation
scripts/tests/test_check_unaddressed_nits_followup.py: 31/31 (25 existants + 6 nouveaux).Acceptance #14705 → tests
myia-ai-01, conditions 1-6 → lève sans[OVERRIDE]test_14705_coordinateur_leve_reserve_hermes(le cas mesuré #14673) + les 2 autres surfaces (_leve_blocage,_leve_changes_requested)test_14705_tiers_non_coordinateur_ne_leve_pas(bystander ≠ coordinateur) +test_voie3_bystander_ne_leve_pasexistanttest_trappe_refusee_pour_lauteur_de_la_pr)jsboige, nommeur ==myia-ai-01, issue postérieure référençant la PR → lèvetest_14705_coordinateur_leve_reserve_hermestest_14705_mutation_sans_constante_les_fp_rougissent(LIFT_OVERRIDE_LOGINSvide → le report coordinateur ne lève plus)Un 7ᵉ garde inattendu s'est révélé utile :
test_14705_coordinateur_conditions_toujours_exigees— le coordinateur reste soumis à la condition 6 (l'issue doit citer la PR) : l'élargissement d'identité ne remplace pas la substance.Closes #14705
🤖 Generated with Claude Code